# 构建阶段
FROM rust:1.87.0-alpine3.22 AS builder

# 安装必要的构建依赖
RUN apk add --no-cache musl-dev

# 设置工作目录
WORKDIR /app

# 复制Cargo文件
COPY Cargo.toml Cargo.lock ./

# 创建一个虚拟的src/main.rs来缓存依赖
RUN mkdir src && echo "fn main() {}" > src/main.rs

# 预构建依赖（利用Docker层缓存）
RUN cargo build --release && rm -rf src

# 复制实际的源代码
COPY src ./src

# 添加musl target
RUN rustup target add x86_64-unknown-linux-musl

# 构建应用程序（静态链接）
RUN cargo build --release --target x86_64-unknown-linux-musl

# 最终阶段 - 使用scratch镜像
FROM scratch

# 复制编译后的二进制文件
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/minidis /minidis

# 复制配置文件
COPY minidis.conf /minidis.conf

# 暴露端口
EXPOSE 6379

# 运行应用
ENTRYPOINT ["/minidis"]